/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package juegocartas.clases;

import java.util.ArrayList;
import java.util.List;
import juegocartas.JugadorMus;
import juegocartas.contratos.GuiMus;

/**
 *
 * @author JuanFran Jara Bellid
 */
public class MotorMus implements ObservadorJugador {

    private List<JugadorMus> listaJugadores;
    private int indiceJugador;
    private GrupoCartas mazo;    
    private GuiMus gui;
        
    private int fase;
    private final int FASE_MUS = 0; 
    private final int FASE_GRANDES = 1;
    private final int FASE_CHICAS = 2;
    private final int FASE_PARES = 3;
    private final int FASE_JUEGO = 4;
    private final int FASE_PUNTO = 5;
    
    int puntosEnvidados;

    public MotorMus() {        
        mazo = GrupoCartas.crearBarajaEspanola();
    }
    
    public void iniciarPartida(List<JugadorMus> listaJugadores, GuiMus gui) {
        this.listaJugadores = listaJugadores;
        this.gui = gui;
        
        barajar();
        repartirCartas();
        
        iniciarMus();
    }

    public void barajar() {
        mazo.barajar();
    }

    public void repartirCartas() {    
        for (int i = 0; i < 4; i++ ) {
            for (JugadorMus jugador : listaJugadores) {
               jugador.cojerCarta(mazo.cogerCartaSuperior());
            }
        }
    }

//    public void mostrarCartasJugadores() {
//        if (listaJugadores == null) {
//            return;
//        }
//     
//        for (JugadorIAJuanfran jugador : listaJugadores) {
//            JuegoMus.ordenarCartasGrande(jugador);
//            gui.mostrarCartas(jugador);            
//        }
//    }

//    public void mostrarCartasMazo() {
//        System.out.println("Cartas del mazo");
//        System.out.println("===============");
//        mazo.mostrarCartas();
//    }

//    public void jugar() {
//                        
//        if (fase == FASE_MUS) {           
//            preguntarQuiereMus();
//        }
//        
//        
//        //juego.jugar(listadoJugadores);
//    }
    
    private void iniciarMus() {
        fase = FASE_MUS;        
        indiceJugador = 0;
        JugadorMus jugador = listaJugadores.get(indiceJugador);
        
        jugador.decidirSiQuiereMus();
    }
    
   private void iniciarFaseGrandes() {
        fase = FASE_MUS;        
        indiceJugador = 0;
        JugadorMus jugador = listaJugadores.get(indiceJugador);
        
        jugador.decidirSiEnvida();
    }

    public void jugadorDiceMus(JugadorIAJuanfran jugador, boolean mus) {
        if (!mus) {            
            iniciarFaseGrandes();
        }
        
        indiceJugador++;
        if (indiceJugador >= listaJugadores.size()) {
            iniciarFaseGrandes();
        }
    }

    public void respuestaJugadorEnvida(JugadorMus jugadorQueEnvida, int puntos) {
        puntosEnvidados += puntos;
        for (JugadorMus jugador : listaJugadores) {
            if (jugadorQueEnvida != jugador) {
                jugador.informarEnvida(jugadorQueEnvida, puntos);
            }
        }
        
        List<JugadorMus> contrarios = obtenerEquipoContrario(jugadorQueEnvida);
        contrarios.get(0).decidirSiQuiere();
    }

    public void jugadorQuiere(JugadorIAJuanfran jugador, boolean quiere) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void jugadorDiceOrdago(JugadorIAJuanfran jugador) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void jugadorDiceMus(JugadorMus jugador, boolean mus) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void jugadorEnvida(JugadorMus jugador, int puntos) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void jugadorQuiere(JugadorMus jugador, boolean quiere) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void jugadorEnvidaMas(JugadorMus jugador, boolean puntos) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void jugadorDiceOrdago(JugadorMus jugador) {
        throw new UnsupportedOperationException("Not supported yet.");
    }


    
    public void jugadorPasa(JugadorMus jugador) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    
    private List<JugadorMus> obtenerEquipoContrario(JugadorMus jugador) {
        
        // TODO: implementar
        return new ArrayList<JugadorMus>();
    }

    private JugadorMus obtenerCompañero(JugadorMus jugador) {
        
        // TODO: implementar
        return jugador;
    }
}
